# request库的使用
# http://www.codeceo.com/article/python-requests.html

import requests,json,os

url = "https://api.github.com/user"
#resp = requests.get(url, auth=('user', 'pass'))
#print('resp get', resp)
# print('resp',resp.json())
# print('resp',resp.text) #和调用 json方法输出的内容基本一样
# print(resp.headers)

# request的所有基本http请求 http://httpbin.org/ 是一个可以测试http请求的网站
data = {'uname': 'joy'}
resp = requests.post('http://httpbin.org/post', data={'uname': 'zhou'})
print('resp post=',resp)  # urllib包下的request库返回的response对象才有read方法
#resp = requests.put('http://httpbin.org/put', data=data)
print('resp =', resp)
#resp = requests.head("http://httpbin.org/get")
print('resp =',resp)

url = "http://127.0.0.1/myweb/"
resp = requests.get(url,params={'uname':'Hello-php'})
#print('resp get',resp.json())#返回的是json格式的字符串 才能使用json方法获取内容
print("resp url",resp.url) #请求地址会包含完整的请求参数
url += "mydata.json"
#resp = requests.get(url,stream=True) #获取json数据 
#print("resp json",resp.json()) # json 函数会通过json格式化后返回
#print("resp json text",resp.text) #text 属性完整返回文本内容
#print(resp.raw.read(resp.raw.length_remaining))


params = {'uname':'Hello-php'}
headers = {'content-type':'application/json'} #自定义请求头
resp = requests.get(url,stream=True,headers=headers) # 通过设置 stream=True 可以获取得到原始的套接字响应

print("resp raw",resp.raw) #获取原始套接字响应 urllib3.response.HTTPResponse 类似 urllib下request返回的 http.client.HTTPResponse 
print("resp raw",resp.raw.length_remaining) #获取原始套接字响应 urllib3.response.HTTPResponse

#原始套接字有read方法 需要传入要读取的长度 读取所有长度可以传  resp.raw.length_remaining 剩余长度
#套接字读取是通过流读取的 如果之前调用了json方法或者text属性读取数据那么套接字的 length_remaining 会变成0 流里面没有数据了
byteData = resp.raw.read(resp.raw.length_remaining) #得到的是二进制数据
print(byteData) #
print(byteData.decode(encoding='utf8')) #解码后获取到数据

#基于post方法请求

# 通过 post 传json数据
url = "http://127.0.0.1/myweb/"
data = {"uname":'joy'}
resp = requests.post(url,data=json.dumps(data)) 
#print("resp post ",resp.text)

#上传文件到php服务器 php代码看 upload.php http://www.jb51.net/article/129002.htm
root = os.path.split(__file__)[0]
fileUrl = os.path.join(root,'data','lon-lat-data.xls') 
url = "http://127.0.0.1/myweb/upload.php"
resp = requests.post(url,files={'myFile':open(fileUrl,'rb')})
print("upload",resp.text)
#流式上传文件 大文件流式上传可以节省内存资源 requests 库官方文档 http://www.python-requests.org/en/master/user/advanced/#streaming-uploads
url = "http://127.0.0.1/myweb/receiveStream.php"
# http://blog.csdn.net/fdipzone/article/details/40098169 参考 receiveStream.php 
fileUrl = os.path.join(root,'data','my.txt') 
with open(fileUrl,'rb') as f:    
    resp = requests.post(url,data=f)
print('resp=',resp.text)

